import commonConst from "@/config/const";
import {
  checkMobilePhone,
  checkIdNumber,
  checkList,
  checkNumber,
  checkPhone,
  checkIntegerNumber,
  checkNowDate,
  checkMultipleList,
  arrayObjectFlat,
} from "@/util/checkFunction";

// 存放仓库检查
function checkStoreId(key, list) {
  if (typeof list !== "object" || !list.length) {
    return true;
  }
  const keyList = key.split(",");
  for (let j = 0; j < list.length; j += 1) {
    for (let i = 0; i < list.length; i += 1) {
      if (list[i] && list[i].storeName === keyList[j]) {
        return false;
      }
    }
  }
  return true;
}

/**
 * 物资导入文件check
 * @param {*} fileData 值
 * @param {*} dataList 数据字典list
 */
export function materialFileCheck(fileData, dataList) {
  const fileCheckMessage = [];
  for (let i = 2; i < fileData.length; i += 1) {
    const material = commonConst.materialFile;
    const handler = `第${i + 2}行：`;
    let message = "";
    // 物资名称
    if (!fileData[i][material.materialName] || fileData[i][material.materialName].length > 100) {
      message += "物资名称、";
    }
    // 存放仓库 旧版本 -> 新版本 去掉存放仓库check
    // if (!fileData[i][material.storeId]
    //   || checkStoreId(fileData[i][material.storeId], dataList.storeIdList)) {
    //   message += '存放仓库、';
    // }
    // 物资类型
    if (!fileData[i][material.materialType] || checkList(fileData[i][material.materialType], dataList.materialTypeList)) {
      message += "物资类型、";
    }
    // 数量
    if (!fileData[i][material.quanity] || checkIntegerNumber(fileData[i][material.quanity])) {
      message += "数量、";
    }
    // 计量单位
    if (!fileData[i][material.measurementUnit] || fileData[i][material.measurementUnit].length > 20) {
      message += "计量单位、";
    }
    // 有效期限
    if (!fileData[i][material.expiryDate] || checkNowDate(fileData[i][material.expiryDate])) {
      message += "有效期限、";
    }
    // 规格型号
    if (!fileData[i][material.specification] || fileData[i][material.specification].length > 30) {
      message += "规格型号、";
    }
    // 行政区域 旧版本 -> 新版本 去掉行政区域check
    // if (!fileData[i][material.districtArea]
    //   || checkList(fileData[i][material.districtArea], dataList.districtDataList)) {
    //   message += '行政区域、';
    // }
    // 适用预案类型
    if (
      !fileData[i][material.applicablePlanType] ||
      checkMultipleList(fileData[i][material.applicablePlanType], dataList.applicablePlanTypeDataList)
    ) {
      message += "适用预案类型、";
    }
    // 主要参数
    if (fileData[i][material.mainParameter] && fileData[i][material.mainParameter].length > 20) {
      message += "主要参数、";
    }
    // 生产厂商及品牌
    if (fileData[i][material.manufacturer] && fileData[i][material.manufacturer].length > 50) {
      message += "生产厂商及品牌、";
    }
    // 使用注意事项
    if (fileData[i][material.precautions] && fileData[i][material.precautions].length > 400) {
      message += "使用注意事项、";
    }

    if (message !== "") {
      fileCheckMessage.push(handler + message.substring(0, message.length - 1));
    }
  }
  return fileCheckMessage;
}

/**
 * 物资库导入文件check
 * @param {*} fileData 值
 * @param {*} dataList 数据字典list
 */
export function materialStoreFileCheck(fileData, dataList) {
  const fileCheckMessage = [];
  for (let i = 2; i < fileData.length; i += 1) {
    const materialStore = commonConst.materialStoreFile;
    const handler = `第${i + 2}行：`;
    let message = "";
    // 物资库名称
    if (!fileData[i][materialStore.storeName] || fileData[i][materialStore.storeName].length > 100) {
      message += "物资库名称、";
    }
    // 负责单位
    if (!fileData[i][materialStore.affiliatedUnit] || fileData[i][materialStore.affiliatedUnit].length > 100) {
      message += "负责单位、";
    }
    // 负责人
    if (!fileData[i][materialStore.dutyPerson] || fileData[i][materialStore.dutyPerson].length > 30) {
      message += "负责人、";
    }
    // 负责人电话
    if (!fileData[i][materialStore.storeDutyTel] || checkMobilePhone(fileData[i][materialStore.storeDutyTel])) {
      message += "负责人电话、";
    }
    // 值班电话
    if (!fileData[i][materialStore.dutyTel] || checkPhone(fileData[i][materialStore.dutyTel])) {
      message += "值班电话、";
    }
    // 面积
    if (!fileData[i][materialStore.storeArea] || checkIntegerNumber(fileData[i][materialStore.storeArea])) {
      message += "面积、";
    }
    // 仓库类型
    if (!fileData[i][materialStore.storeType] || checkList(fileData[i][materialStore.storeType], dataList.storeTypeList)) {
      message += "仓库类型、";
    }
    // 行政区域 旧版本 -> 新版本 去掉行政区域check
    // if (!fileData[i][materialStore.districtArea]
    //   || checkList(fileData[i][materialStore.districtArea], dataList.districtDataList)) {
    //   message += '行政区域、';
    // }
    // 地址
    if (!fileData[i][materialStore.address] || fileData[i][materialStore.address].length > 100) {
      message += "详细地址、";
    }
    // 仓库介绍
    if (fileData[i][materialStore.storeIntroduction] && fileData[i][materialStore.storeIntroduction].length > 100) {
      message += "仓库介绍、";
    }
    // 经度（度）
    if (checkNumber(fileData[i][materialStore.longitude])) {
      message += "经度（度）、";
    }
    // 纬度（度）
    if (checkNumber(fileData[i][materialStore.latitude])) {
      message += "纬度（度）、";
    }
    if (message !== "") {
      fileCheckMessage.push(handler + message.substring(0, message.length - 1));
    }
  }
  return fileCheckMessage;
}

/**
 * 队伍导入文件check
 * @param {*} fileData 值
 * @param {*} dataList 数据字典list
 */
export function teamFileCheck(fileData, dataList) {
  const fileCheckMessage = [];
  for (let i = 2; i < fileData.length; i += 1) {
    const teamManage = commonConst.teamManageFile;
    const handler = `第${i + 2}行：`;
    let message = "";
    // 队伍名称
    if (!fileData[i][teamManage.teamName] || fileData[i][teamManage.teamName].length > 100) {
      message += "队伍名称、";
    }
    // 所属单位
    if (!fileData[i][teamManage.affiliatedUnit] || fileData[i][teamManage.affiliatedUnit].length > 100) {
      message += "所属单位、";
    }
    // 负责人
    if (!fileData[i][teamManage.teamDutyPerson] || fileData[i][teamManage.teamDutyPerson].length > 30) {
      message += "负责人、";
    }
    // 负责人电话
    if (!fileData[i][teamManage.teamDutyTel] || checkMobilePhone(fileData[i][teamManage.teamDutyTel])) {
      message += "负责人电话、";
    }
    // 值班电话
    if (!fileData[i][teamManage.dutyTel] || checkPhone(fileData[i][teamManage.dutyTel])) {
      message += "值班电话、";
    }
    // 人数
    if (!fileData[i][teamManage.personCount] || checkIntegerNumber(fileData[i][teamManage.personCount])) {
      message += "人数、";
    }
    // 队伍类型
    if (!fileData[i][teamManage.teamType] || checkList(fileData[i][teamManage.teamType], dataList.teamTypeList)) {
      message += "队伍类型、";
    }
    // 行政区域 旧版本 -> 新版本 去掉行政区域check
    // if (!fileData[i][teamManage.districtArea]
    //   || checkList(fileData[i][teamManage.districtArea], dataList.districtDataList)) {
    //   message += '行政区域、';
    // }
    // 常驻地
    if (!fileData[i][teamManage.locationAddress] || fileData[i][teamManage.locationAddress].length > 100) {
      message += "常驻地、";
    }
    // 经度（度）
    if (checkNumber(fileData[i][teamManage.longitude])) {
      message += "经度（度）、";
    }
    // 经度（度）
    if (checkNumber(fileData[i][teamManage.latitude])) {
      message += "纬度（度）、";
    }
    // 适用预案类型
    if (
      !fileData[i][teamManage.applicablePlanType] ||
      checkMultipleList(fileData[i][teamManage.applicablePlanType], dataList.applicablePlanTypeDataList)
    ) {
      message += "适用预案类型、";
    }
    // 队伍介绍
    if (!fileData[i][teamManage.teamIntroduction] || fileData[i][teamManage.teamIntroduction].length > 400) {
      message += "队伍介绍、";
    }
    // 备注
    if (fileData[i][teamManage.remarks] && fileData[i][teamManage.remarks].length > 400) {
      message += "备注、";
    }
    if (message !== "") {
      fileCheckMessage.push(handler + message.substring(0, message.length - 1));
    }
  }
  return fileCheckMessage;
}

/**
 * 专家导入文件check
 * @param {*} fileData 值
 * @param {*} dataList 数据字典list
 */
export function expertFileCheck(fileData, dataList) {
  const fileCheckMessage = [];
  for (let i = 2; i < fileData.length; i += 1) {
    const expertManage = commonConst.expertManageFile;
    const handler = `第${i + 2}行：`;
    let message = "";
    // 专家姓名
    if (!fileData[i][expertManage.name] || fileData[i][expertManage.name].length > 30) {
      message += "专家姓名、";
    }
    // 身份证号
    if (!fileData[i][expertManage.idCard] || checkIdNumber(fileData[i][expertManage.idCard])) {
      message += "身份证号、";
    }
    // 手机号码
    if (!fileData[i][expertManage.mobileNumber] || checkMobilePhone(fileData[i][expertManage.mobileNumber])) {
      message += "手机号码、";
    }
    // 性别
    if (!fileData[i][expertManage.gender] || checkList(fileData[i][expertManage.gender], dataList.genderList)) {
      message += "性别、";
    }
    // 专业类别 旧版本 -> 新版本 去掉专业类别check
    // if (!fileData[i][expertManage.majorCategory]
    //   || checkMultipleList(fileData[i][expertManage.majorCategory], dataList.majorCategoryDataList)) {
    //   message += '专业类别、';
    // }
    // 专家级别
    if (!fileData[i][expertManage.expertLevel] || checkList(fileData[i][expertManage.expertLevel], dataList.expertLevelList)) {
      message += "专家级别、";
    }
    // 最高学历
    if (!fileData[i][expertManage.education] || checkList(fileData[i][expertManage.education], dataList.educationList)) {
      message += "最高学历、";
    }
    // 行政区域 旧版本 -> 新版本 去掉行政区域check
    // if (!fileData[i][expertManage.districtArea]
    //   || checkList(fileData[i][expertManage.districtArea], dataList.districtDataList)) {
    //   message += '行政区域、';
    // }
    // 工作单位
    if (!fileData[i][expertManage.workUnit] || fileData[i][expertManage.workUnit].length > 100) {
      message += "工作单位、";
    }
    // 职务/职称
    if (fileData[i][expertManage.duty] && fileData[i][expertManage.duty].length > 30) {
      message += "职务/职称、";
    }
    // 单位地址
    if (!fileData[i][expertManage.unitAddress] || fileData[i][expertManage.unitAddress].length > 100) {
      message += "单位地址、";
    }
    // 家庭住址
    if (!fileData[i][expertManage.homeAddress] || fileData[i][expertManage.homeAddress].length > 100) {
      message += "家庭住址、";
    }
    // 经度（度）
    if (checkNumber(fileData[i][expertManage.longitude])) {
      message += "经度（度）、";
    }
    // 纬度（度）
    if (checkNumber(fileData[i][expertManage.latitude])) {
      message += "纬度（度）、";
    }
    // 适用预案类型 旧版本 -> 新版本  改成擅长事故类型
    // if (!fileData[i][expertManage.applicablePlanType]
    //   || checkMultipleList(fileData[i][expertManage.applicablePlanType], dataList.applicablePlanTypeDataList)) {
    //   message += '使用预案类型、';
    // }
    // 适用预案类型 旧版本 -> 新版本  改成擅长事故类型
    // 适用预案是一维结构  擅长事故类型是多维结构 使用arrayObjectFlat() 转为一维结构
    if (
      !fileData[i][expertManage.applicablePlanType] ||
      checkMultipleList(fileData[i][expertManage.applicablePlanType], arrayObjectFlat(dataList.applicablePlanTypeDataList, []))
    ) {
      message += "擅长事故类型、";
    }
    arrayObjectFlat(dataList.applicablePlanTypeDataList, []);
    // 备注
    if (fileData[i][expertManage.remarks] && fileData[i][expertManage.remarks].length > 400) {
      message += "备注、";
    }
    if (message !== "") {
      fileCheckMessage.push(handler + message.substring(0, message.length - 1));
    }
  }
  return fileCheckMessage;
}
/**
 * 车辆导入文件check
 * @param {*} fileData 值
 * @param {*} dataList 数据字典list
 */
export function vehicleFileCheck(fileData, dataList) {
  const fileCheckMessage = [];
  for (let i = 2; i < fileData.length; i += 1) {
    const expertManage = commonConst.vehicleManageFile;
    const handler = `第${i + 2}行：`;
    let message = "";
    // 车牌号
    if (!fileData[i][expertManage.vehicleNum] || fileData[i][expertManage.vehicleNum].length > 8) {
      message += "车牌号、";
    }
    // 车辆类型
    if (!fileData[i][expertManage.vehicleType] || checkList(fileData[i][expertManage.vehicleType], dataList.vehicleTypeList)) {
      message += "车牌类型、";
    }
    // 所属单位
    if (!fileData[i][expertManage.workUnit] || fileData[i][expertManage.workUnit].length > 100) {
      message += "所属单位、";
    }
    // 负责人
    if (!fileData[i][expertManage.contactPersonName] || fileData[i][expertManage.workUnit].length > 30) {
      message += "负责人、";
    }
    // 负责人电话
    if (!fileData[i][expertManage.contactPersonTel] || checkMobilePhone(fileData[i][expertManage.contactPersonTel])) {
      message += "负责人电话、";
    }
    // 单位地址
    if (!fileData[i][expertManage.unitAddress] || fileData[i][expertManage.unitAddress].length > 100) {
      message += "单位地址、";
    }
    // 经度（度）
    if (checkNumber(fileData[i][expertManage.longitude])) {
      message += "经度（度）、";
    }
    // 纬度（度）
    if (checkNumber(fileData[i][expertManage.latitude])) {
      message += "纬度（度）、";
    }
    if (message !== "") {
      fileCheckMessage.push(handler + message.substring(0, message.length - 1));
    }
  }
  return fileCheckMessage;
}
/**
 * 应急避难场所导入文件check
 * @param {*} fileData 值
 * @param {*} dataList 数据字典list
 */
export function shelterFileCheck(fileData, dataList) {
  const fileCheckMessage = [];
  for (let i = 2; i < fileData.length; i += 1) {
    const shelter = commonConst.shelterFile;
    const handler = `第${i + 2}行：`;
    let message = "";
    // 场所名称
    if (!fileData[i][shelter.siteName] || fileData[i][shelter.siteName].length > 30) {
      message += "场所名称、";
    }
    // 负责单位
    if (!fileData[i][shelter.responsibleUnit] || fileData[i][shelter.responsibleUnit].length > 100) {
      message += "负责单位、";
    }
    // 可容纳人数
    if (!fileData[i][shelter.capacity] || checkIntegerNumber(fileData[i][shelter.capacity])) {
      message += "可容纳人数、";
    }
    // 场所类型
    if (!fileData[i][shelter.placeType] || checkList(fileData[i][shelter.placeType], dataList.placeTypeList)) {
      message += "场所类型、";
    }
    // 联系人
    if (!fileData[i][shelter.contactPersonName] || fileData[i][shelter.contactPersonName].length > 30) {
      message += "联系人、";
    }
    // 联系人电话
    if (!fileData[i][shelter.contactPersonTel] || checkMobilePhone(fileData[i][shelter.contactPersonTel])) {
      message += "联系人电话、";
    }
    // 值班电话
    if (!fileData[i][shelter.dutyTel] || checkPhone(fileData[i][shelter.dutyTel])) {
      message += "值班电话、";
    }
    // 行政区域 旧版本 -> 新版本 去掉行政区域check
    // if (!fileData[i][shelter.districtArea]
    //   || checkList(fileData[i][shelter.districtArea], dataList.districtDataList)) {
    //   message += '行政区域、';
    // }
    // 详细地址
    if (!fileData[i][shelter.detailedAddress] || fileData[i][shelter.detailedAddress].length > 100) {
      message += "详细地址、";
    }
    // 经度（度）
    if (checkNumber(fileData[i][shelter.longitude])) {
      message += "经度（度）、";
    }
    // 纬度（度）
    if (checkNumber(fileData[i][shelter.latitude])) {
      message += "纬度（度）、";
    }
    // 使用面积
    if (
      !fileData[i][shelter.useArea] ||
      checkNumber(fileData[i][shelter.useArea]) ||
      fileData[i][shelter.useArea] < 0 ||
      fileData[i][shelter.useArea] > 10000000000
    ) {
      message += "使用面积、";
    }
    // 场所简介
    if (fileData[i][shelter.placeProfile] && fileData[i][shelter.placeProfile].length > 400) {
      message += "场所简介、";
    }
    if (message !== "") {
      fileCheckMessage.push(handler + message.substring(0, message.length - 1));
    }
  }
  return fileCheckMessage;
}

/**
 * 应急机构导入文件check
 * @param {*} fileData 值
 * @param {*} dataList 数据字典list
 */
export function organizationFileCheck(fileData, dataList) {
  const fileCheckMessage = [];
  for (let i = 2; i < fileData.length; i += 1) {
    const organization = commonConst.organizationFile;
    const handler = `第${i + 2}行：`;
    let message = "";
    // 机构名称
    if (!fileData[i][organization.organizationName] || fileData[i][organization.organizationName].length > 100) {
      message += "机构名称、";
    }
    // 地址
    if (!fileData[i][organization.address] || fileData[i][organization.address].length > 100) {
      message += "地址、";
    }
    // 行政区域 旧版本 -> 新版本 去掉行政区域check
    // if (!fileData[i][organization.districtArea]
    //   || checkList(fileData[i][organization.districtArea], dataList.districtDataList)) {
    //   message += '行政区域、';
    // }
    // 经度（度）
    if (checkNumber(fileData[i][organization.longitude])) {
      message += "经度（度）、";
    }
    // 纬度（度）
    if (checkNumber(fileData[i][organization.latitude])) {
      message += "纬度（度）、";
    }
    // 值班电话
    if (!fileData[i][organization.dutyTel] || checkPhone(fileData[i][organization.dutyTel])) {
      message += "值班电话、";
    }
    // 机构联络人
    if (!fileData[i][organization.contactPersonName] || fileData[i][organization.contactPersonName].length > 30) {
      message += "机构联络人、";
    }
    // 机构联络人电话
    if (!fileData[i][organization.contactPersonTel] || checkMobilePhone(fileData[i][organization.contactPersonTel])) {
      message += "机构联络人电话、";
    }
    // 机构负责人
    if (fileData[i][organization.dutyPersonName] && fileData[i][organization.dutyPersonName].length > 30) {
      message += "机构负责人、";
    }
    // 机构负责人电话
    if (fileData[i][organization.dutyPersonTel] && checkMobilePhone(fileData[i][organization.dutyPersonTel])) {
      message += "机构负责人电话、";
    }
    // 传真
    if (fileData[i][organization.fax] && fileData[i][organization.fax].length > 20) {
      message += "传真、";
    }
    // 机构类型
    if (!fileData[i][organization.organizationType] || checkList(fileData[i][organization.organizationType], dataList.organizationTypeList)) {
      message += "机构类型、";
    }
    // 机构简介
    if (fileData[i][organization.organizationProfile] && fileData[i][organization.organizationProfile].length > 400) {
      message += "机构简介、";
    }
    // 机构职责
    if (fileData[i][organization.organizationDuty] && fileData[i][organization.organizationDuty].length > 400) {
      message += "机构职责、";
    }
    if (message !== "") {
      fileCheckMessage.push(handler + message.substring(0, message.length - 1));
    }
  }
  return fileCheckMessage;
}

/**
 * 应急队伍人员导入文件check
 * @param {*} fileData 值
 * @param {*} dataList 数据字典list
 */
export function teamMemberFileCheck(fileData, dataList) {
  const fileCheckMessage = [];
  for (let i = 2; i < fileData.length; i += 1) {
    const teamMemberManage = commonConst.teamMemberManageFile;
    const handler = `第${i + 2}行：`;
    let message = "";
    // 姓名
    if (!fileData[i][teamMemberManage.teamMemberName] || fileData[i][teamMemberManage.teamMemberName].length > 30) {
      message += "姓名、";
    }
    // 性别
    if (!fileData[i][teamMemberManage.gender] || checkList(fileData[i][teamMemberManage.gender], dataList.genderList)) {
      message += "性别、";
    }
    // 年龄
    if (
      !fileData[i][teamMemberManage.age] ||
      fileData[i][teamMemberManage.age] > 200 ||
      fileData[i][teamMemberManage.age] < 0 ||
      checkIntegerNumber(fileData[i][teamMemberManage.age])
    ) {
      message += "年龄、";
    }
    // 手机号码
    if (!fileData[i][teamMemberManage.mobileNumber] || checkMobilePhone(fileData[i][teamMemberManage.mobileNumber])) {
      message += "手机号码、";
    }
    // 单位
    if (!fileData[i][teamMemberManage.unitName] || fileData[i][teamMemberManage.unitName].length > 100) {
      message += "单位、";
    }
    // 职务
    if (fileData[i][teamMemberManage.duty] && fileData[i][teamMemberManage.duty].length > 30) {
      message += "职务、";
    }
    if (message !== "") {
      fileCheckMessage.push(handler + message.substring(0, message.length - 1));
    }
  }
  return fileCheckMessage;
}

export default {
  materialFileCheck,
  materialStoreFileCheck,
  teamFileCheck,
  expertFileCheck,
  shelterFileCheck,
  organizationFileCheck,
  teamMemberFileCheck,
};
